#ifndef _PBVP_DATAINTERFACE_H
#define _PBVP_DATAINTERFACE_H

namespace PBVP {
	typedef enum {
		GEOMETRY_DATA = 0,
		VOLUME_DATA,
		PROTEIN_DATA,
		ATOMSET_DATA,
		UNKNOWN_DATA = 255
	} DataSetType;

	/// Supported scalar data types in a dataset
	typedef enum {
		UCHAR_TYPE = 0,
		USHORT_TYPE,
		FLOAT_TYPE,
		INT_TYPE,
		DOUBLE_TYPE,
		NO_TYPE = 255
	} DataType;
	
	/// union of data pointers.
	union DataPtr {
		unsigned char*  uchar_ptr;
		unsigned short* ushort_ptr;
		float*          float_ptr;
		int*            int_ptr;
		double*         double_ptr;
    };

	/// Base class of all datasets
	/** 
	 *
	 */
	class DataInterface {
	public:
		/// Constructor
		DataInterface() {}
		/// Destructor
		virtual ~DataInterface() {}
		/// Return the type of the data
		virtual DataSetType getDataSetType() const {
			return UNKNOWN_DATA;
		}

	protected:
		
	};
}

#endif